//
// Created by 郝正辉 on 2020/11/22.
//

#ifndef C_TEST_SET_H
#define C_TEST_SET_H

#include "list.h"

typedef List Set;

void set_init(Set *set,
              int(*match)(const void *key1, const void *key2),
              void (*destroy)(void *data)
);

#define set_destroy(set) list_destroy(set)

int set_insert(Set *set, const void *data);

int set_remove(Set *set, void **data);

int set_union(Set *setu, const Set *set1, const Set *set2);

int set_intersection(Set *seti, const Set *set1, const Set *set2);

int set_difference(Set *setd, const Set *set1, const Set *set2);

int set_is_member(const Set *set, const void *data);

int set_is_subset(const Set *set1, const Set *set2);

int set_is_equal(const Set *set1, const Set *set2);

#define set_size(set) ((set)->size)


#endif //C_TEST_SET_H
